package com.binhthuan.catechist.server.domain;

import java.util.Date;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.google.gson.annotations.Expose;

/**
 * @author Giang Đinh - Năm học, tương ứng với bảng <b>ec_year</b> trong cơ sở
 *         dữ liệu.
 */
@Entity
@Table(name = "ec_year")
public class Year extends AbstractObject {

    /**
     * Mã năm học.
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    @Expose
    private Integer id;
    
    /**
     * Ngày bắt đầu.
     */
    @Column(name = "opening_date")
    @Expose
    private Date startDate;
    
    /**
     * Ngày kết thúc.
     */
    @Column(name = "closing_date")
    @Expose
    private Date endDate;
    
    /**
     * Mô tả.
     */
    @Column(name = "description", length = 20)
    @Expose
    private String description;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "year", fetch = FetchType.LAZY)
    private Set<Course> courses;

    /**
     * 
     */
    public Year() {
    }

    /**
     * Lấy mã năm học.
     * @return Mã năm học.
     */
    public Integer getId() {
        return id;
    }

    /**
     * Gán mã năm học.
     * @param id
     *            Mã năm học.
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * Lấy mô tả.
     * @return Mô tả.
     */
    public String getDescription() {
        return description;
    }

    /**
     * Gán mô tả.
     * @param description
     *            Mô tả.
     */
    public void setDescription(String description) {
        this.description = description;
    }

    /**
     * Lấy ngày bắt đầu.
     * @return Ngày bắt đầu.
     */
    public Date getStartDate() {
        return startDate;
    }

    /**
     * Gán ngày bắt đầu.
     * @param startDate Ngày bắt đầu.
     */
    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

    /**
     * Lấy ngày kết thúc.
     * @return Ngày kết thúc.
     */
    public Date getEndDate() {
        return endDate;
    }

    /**
     * Gán ngày kết thúc.
     * @param endDay Ngày kết thúc.
     */
    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }

    /**
     * @return the courses
     */
    public Set<Course> getCourses() {
        return courses;
    }

    /**
     * @param courses the courses to set
     */
    public void setCourses(Set<Course> courses) {
        this.courses = courses;
    }
}
